#pragma once

#include "Vector4.h"

class CMatrix4
{
public:
	CMatrix4(void);
	virtual ~CMatrix4(void);

	CVector4& operator[](int row) { return m_rows[row]; }
	const CVector4& operator[](int row) const { return m_rows[row]; }

	CMatrix4 operator*(const CMatrix4& rhs) const;

	CMatrix4& operator=(const CMatrix4& rhs);

	static CMatrix4 IdentityMatrix();
	static CMatrix4 TranslationMatrix(DATA_TYPE xTrans, DATA_TYPE yTrans, DATA_TYPE zTrans);
	static CMatrix4 ScalingMatrix(DATA_TYPE xScale, DATA_TYPE yScale, DATA_TYPE zScale);

private:
	CVector4 m_rows[4];
};

 CVector4 operator*(const CMatrix4& lhs, const CVector4& rhs);